package com.guagua.vas.util;
/**
 * 北京八度互联科技有限公司版权所有
 * Copyright (C) Badu Corporation. All Rights Reserved
 */

import java.util.concurrent.TimeUnit;

import com.guagua.chat.room.ChatRoomUtil;
import com.guagua.util.HazelcastConfigUtil;
import com.hazelcast.client.HazelcastClient;

/** ******************************************************************
* 类概要:缓存管理工具类，针对memcache缓存的管理
 * @author 白云鹏
 * @version 2012年7月31日10:11:39
*******************************************************************
**/
public class CacheManager {
	private static CacheManager instance = null;
	 //private static MemcachedClient mc = null;
	private static HazelcastClient hc = null;
	private static String FIELD="zy.17guagua.com";
	private CacheManager() {}
	
	/**
	 * 函数说明：获取工具的单例对象
	 * <br/>
	 * @return 返回结果说明.
	 *         返回缓存工具类对象
	 */
	public static CacheManager getInstance() {
		if (null == instance) {
			instance = new CacheManager();
		}
		if(hc==null){
			hc = HazelcastConfigUtil.getClientInstance();
		}
//		if(mc == null){
//			try {
//				mc = new MemcachedClient(new InetSocketAddress(CacheConstants.MEMCACHED_IP, Integer.parseInt(CacheConstants.MEMCACHED_PORT)));
//			} catch (NumberFormatException e) {
//				e.printStackTrace();
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
//		}
		return instance;
	}

	/**
	 * 函数说明：根据键值key删除缓存中对应的对象
	 * <br/>
	 * @param key 类型:(long)；<br/> 
	 * 含义: 键值，整型格式的键值<br/>；
	 * @return 返回结果说明.
	 *         无返回值
	 */
	public void remove(long key) {
		remove(Long.toString(key));
	}
	
	/**
	 * 函数说明：根据键值key删除缓存中对应的对象
	 * <br/>
	 * @param key 类型:(String)；<br/> 
	 * 含义: 键值，字符型格式的键值<br/>；
	 * @return 返回结果说明.
	 *         无返回值
	 */
	public void remove(String key) {
		HazelcastConfigUtil.getClientInstance().getMap(FIELD).remove(key);
	}
	
	/**
	 * 函数说明：将键值及其对应的数值放入到缓存中，默认缓存时间为15分钟
	 * <br/>
	 * @param key 类型:(long)；<br/> 
	 * 含义: 键值，整型格式的键值<br/>；
	 * @param value 类型:(Object)；<br/> 
	 * 含义: 键值对应的数值，允许为任何对象<br/>；
	 * @return 返回结果说明.
	 *         无返回值
	 */
//	public void put(long key, Object value) {
//		int default_exp = 900;
//		put(Long.toString(key), value, default_exp);
//	}
	
	/**
	 * 函数说明：将键值及其对应的数值放入到缓存中，缓存时间可以自由设定
	 * <br/>
	 * @param key 类型:(long)；<br/> 
	 * 含义: 键值，整型格式的键值<br/>；
	 * @param value 类型:(Object)；<br/> 
	 * 含义: 键值对应的数值，允许为任何对象<br/>；
	 * @param exp 类型:(int)；<br/> 
	 * 含义: 缓存时间<br/>；
	 * @return 返回结果说明.
	 *         无返回值
	 */
//	public void put(long key, Object value, int exp) {
//		put(Long.toString(key), value, exp);
//	}
	
	/**
	 * 函数说明：将键值及其对应的数值放入到缓存中，缓存时间可以自由设定
	 * <br/>
	 * @param key 类型:(String)；<br/> 
	 * 含义: 键值，字符串型格式的键值<br/>；
	 * @param value 类型:(Object)；<br/> 
	 * 含义: 键值对应的数值，允许为任何对象<br/>；
	 * @param exp 类型:(int)；<br/> 
	 * 含义: 缓存时间<br/>；
	 * @return 返回结果说明.
	 *         无返回值
	 */
	public void put(String key, Object value, long exp,TimeUnit timeUnit) {
		//mc.add(key, exp, value);
		hc.getMap(FIELD).put(key, value, exp, timeUnit);
	}
	
	
	/**
	 * 函数说明：将键值及其对应的数值放入到缓存中，缓存时间默认是到晚上12点清理.
	 *         无返回值
	 */
	public void put(String key, Object value) {
		//mc.add(key, exp, value);
		hc.getMap(FIELD).put(key, value, ChatRoomUtil.getTimeUnitMillisecond(), TimeUnit.MINUTES);
	}
	
	/**
	 * 函数说明：根据键获取缓存中的对象
	 * <br/>
	 * @param key 类型:(long)；<br/> 
	 * 含义: 键值，整型格式的键值<br/>；
	 * @return 返回结果说明.
	 *         （Object）返回对象
	 */
	public Object get(long key) {
		String s_key = Long.toString(key);
		return get(s_key);
	}
	
	/**
	 * 函数说明：根据键获取缓存中的对象
	 * <br/>
	 * @param key 类型:(String)；<br/> 
	 * 含义: 键值，字符串型格式的键值<br/>；
	 * @return 返回结果说明.
	 *         （Object）返回对象
	 */
	
	public Object get(String key) {
		return hc.getMap(FIELD).get(key);
	}
}
